/**
 * @version 1.0
 * @author Tore
 * @since 17.05.2012
 */

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.ArrayList;

import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;


public class InnsjekkingsVindu implements ActionListener{
	private Hotellvindu vindu;
	private JPanel innsjekkingsPanel = new JPanel(new GridLayout(1,3));
	private JPanel bookingListe, bookingDetaljer;
	private JButton sjekkInnKnapp, oppdaterKnapp;
	private JList<String> innsjekkingsListe;
	private String[] innsjekkingsArray;
	private Hotell hotellet;
	private ArrayList<Booking> bookinger;
	
	public InnsjekkingsVindu(Hotellvindu forelder){
		vindu = forelder;
	}

	public JPanel innsjekkingsPanel() {
		
		innsjekkingsPanel.add(bookingListe());
		
		return innsjekkingsPanel;
	}
	
	public JPanel bookingListe(){
		bookingListe = new JPanel();
		bookingListe.setLayout(new BoxLayout(bookingListe, BoxLayout.PAGE_AXIS));
		bookingListe.add(new JLabel("Bookinger som ikke er sjekket inn"));
		hotellet = vindu.getHotellsystem().getHotellRegister().getHoteller().get(0);
		innsjekkingsArray = getInnsjekkingsListe();
		innsjekkingsListe = new JList<String>(innsjekkingsArray);
		innsjekkingsListe.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //Kan kun velge en kunde
		JScrollPane skrollefelt = new JScrollPane(innsjekkingsListe);
		bookingListe.add(skrollefelt);
		Icon oppdater = lagIkon("bilder/oppdater.png");
		oppdaterKnapp = new JButton(oppdater);
		oppdaterKnapp.addActionListener(this);
		bookingListe.add(oppdaterKnapp);
		sjekkInnKnapp = new JButton("Sjekk inn");
		sjekkInnKnapp.addActionListener(this);
		bookingListe.add(sjekkInnKnapp);
		return bookingListe;
	}
	
	public JPanel visBookingDetaljer(Booking bookingen){
		
		bookingDetaljer = new JPanel();
		bookingDetaljer.removeAll();
		JTextArea detaljer = new JTextArea();
		detaljer.setText(bookingen.toString());
		detaljer.setEditable(false);
		bookingDetaljer.add(detaljer);
		return bookingDetaljer;
	}
	
	public String[] getInnsjekkingsListe() {
		if(hotellet.getRomregisteret() != null && hotellet.getBookinger().finnBookingerUtenFaktura() != null){
			hotellet.getBookinger().finnBookingerUtenFaktura().trimToSize();
			bookinger = hotellet.getBookinger().finnBookingerUtenFaktura();
			innsjekkingsArray = new String[bookinger.size()];
				for(int i = 0; i<bookinger.size(); i++){		
					innsjekkingsArray[i] = bookinger.get(i).getKunde().getKundenavn();
				}			
		}
		else{
			innsjekkingsArray = new String[0];
		}
		return innsjekkingsArray;	
	}
	public ImageIcon lagIkon(String filsti){
		ImageIcon ikon = null;
		URL bildefil = InnsjekkingsVindu.class.getResource(filsti);
		if(bildefil != null){
			ikon = new ImageIcon(getClass().getClassLoader().getResource(filsti));//new ImageIcon(bildefil);
		}
		else{
			System.out.println("Fant ikke bildefil " + filsti);	
		}
		return ikon;
	}
	
	public void oppdaterFelter(){
		innsjekkingsPanel.remove(bookingListe);
		innsjekkingsPanel.add(bookingListe());
		innsjekkingsPanel.repaint();
		innsjekkingsPanel.revalidate();
	}
	
	public void actionPerformed(ActionEvent ae) {
		if(ae.getSource() == sjekkInnKnapp){
			if(!innsjekkingsListe.isSelectionEmpty()){
				Booking bookingen = bookinger.get(innsjekkingsListe.getSelectedIndex());
				bookingen.sjekkInn(vindu.getHotellsystem().getHotellRegister().getHoteller().get(0).getKontonummer());
				innsjekkingsPanel.removeAll();
				innsjekkingsPanel.add(bookingListe());
				innsjekkingsPanel.add(visBookingDetaljer(bookingen));
				innsjekkingsPanel.repaint();
				innsjekkingsPanel.revalidate();				
			}
		}
		if(ae.getSource() == oppdaterKnapp){
			oppdaterFelter();
		}
		
	}
}

